﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BAL;

namespace GrouponDesktop.AbmCliente
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //Traemos el listado de clientes
            
            this.gridRoles.CellContentClick += new DataGridViewCellEventHandler(btnClick);
            CargarListado(null,null);
        }

        private void CargarListado(object sender, FormClosedEventArgs e)
        {
            ClienteBAL proxy = new ClienteBAL();
            gridRoles.DataSource = (from item in proxy.GetClientes() select new { item.VarNombre, item.VarApellido, item.BigDNI, item.IntIdCliente, item.VarMail, item.BitIsDeleted }).ToList();
        }

        public void btnClick(object sender, DataGridViewCellEventArgs e)
        {
            int selectedRowIndex = int.Parse(e.RowIndex.ToString());
            if (this.gridRoles.Columns[e.ColumnIndex].Name.ToString() == "btnDelete")
            {
                
                DAL.Entities.ClienteEntity item = new DAL.Entities.ClienteEntity();
                item.IntIdCliente = (int)gridRoles.CurrentRow.Cells[5].Value;
                if (DeleteCliente(item))
                {
                    CargarListado(null,null);
                }
            }
            else if (this.gridRoles.Columns[e.ColumnIndex].Name.ToString() == "btnEdit")
            {
                DAL.Entities.ClienteEntity item = new DAL.Entities.ClienteEntity();
                item.IntIdCliente = (int)gridRoles.CurrentRow.Cells[5].Value;
                AgregarOEditarCliente form = new AgregarOEditarCliente(item.IntIdCliente);
                form.FormClosed += new FormClosedEventHandler(CargarListado);
                form.ShowDialog();
            }
            else if (this.gridRoles.Columns[e.ColumnIndex].Name.ToString() == "changePW")
            {
                DAL.Entities.ClienteEntity item = new DAL.Entities.ClienteEntity();
                AbmProveedor.CambiarPassword form = new AbmProveedor.CambiarPassword((int)gridRoles.CurrentRow.Cells[5].Value, true);
                form.ShowDialog();
            }
            else if (this.gridRoles.Columns[e.ColumnIndex].Name.ToString() == "changeRol")
            {
                bool estaBorrado = (bool)gridRoles.CurrentRow.Cells[7].Value;
                if(!estaBorrado){
                    DAL.Entities.ClienteEntity item = new DAL.Entities.ClienteEntity();
                    AbmCliente.CambiarAProveedor form = new AbmCliente.CambiarAProveedor((int)gridRoles.CurrentRow.Cells[5].Value);
                    form.ShowDialog(); 
                    CargarListado(null, null);
                }else{
                    MessageBox.Show("El cliente se encuentra deshabilitado por lo tanto no puede cambiarse su rol.");
                }
            }
        }


        private void btnFiltrar_Click(object sender, EventArgs e)
        {
            DAL.Entities.ClienteEntity cliente = new DAL.Entities.ClienteEntity();
            

            if(txtApellido.Text == string.Empty && txtNombre.Text == string.Empty && txtDNI.Text == string.Empty && txtEmail.Text == string.Empty){
                CargarListado(null,null);
            }else{

                //Parseamos el campo de dni
                if(txtDNI.Text != string.Empty){
                    string Str = txtDNI.Text.Trim();
                    int Num;
                    bool isNum = int.TryParse(Str, out Num);
                    if (isNum){
                        cliente.BigDNI = long.Parse(txtDNI.Text);
                    }else{
                        cliente.BigDNI = 0;
                    }
                }else{
                    cliente.BigDNI = 0;
                }

                cliente.VarMail = txtEmail.Text;
                cliente.VarNombre = txtNombre.Text;
                cliente.VarApellido = txtApellido.Text;
                //Buscamos los datos de nuevo sin filtros
                ClienteBAL proxy = new ClienteBAL();
                gridRoles.DataSource = (from item in proxy.GetClientesFiltre(cliente) select new { item.VarNombre, item.VarApellido, item.BigDNI, item.IntIdCliente, item.VarMail, item.BitIsDeleted }).ToList();

                
            }
        }

        /// <summary>
        /// Funcion que borra logicamente un rol
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        private bool DeleteCliente(DAL.Entities.ClienteEntity item)
        {
            if (MessageBox.Show("Esta seguro que desea borrar al cliente " + item.VarNombre + " "+item.VarApellido+"?", "Confirm delete", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                //Borramos el rol
                BAL.ClienteBAL proxy = new ClienteBAL();
                proxy.DeleteCliente(item);
                return true;
            }
            else
            {
                return false;
            }
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            AgregarOEditarCliente form = new AgregarOEditarCliente(0);
            form.FormClosed += new FormClosedEventHandler(CargarListado);
            form.ShowDialog();
        }
    }
}
